// import axios from 'axios'
import { minganciData } from './minganciData.js'
import { minganciBiaoshu, zhudongCancel } from './type'

/** chat问答工具 */
export class ChatUtils {

	/** 请求数据源 */
	static source;

	/** 停止请求 */
	// static stopRequest() { this.source.cancel('用户主动取消'); }

	// /** 接口请求 */
	// static request(data, onUpdateBack, url = 'chat-process') {
	// 	return new Promise((resolve, reject) => {
	// 		let failNum = 0;
	// 		const fn = async _ => {
	// 			this.source = axios.CancelToken.source();
	// 			axios.post(`https://chat.hhchatai.com/${url}`, data, {
	// 				cancelToken: this.source.token,
	// 				onDownloadProgress(res) {
	// 					const info = ChatUtils._getResponseData(res.event.target.responseText);
	// 					if (info.result) {
	// 						if (minganciData.some(str => ~info.result.indexOf(str)))
	// 							this.source.cancel('敏感词触发停止请求');
	// 						else onUpdateBack && onUpdateBack(info);
	// 					}
	// 				}
	// 			}).then(res => {
	// 				resolve(ChatUtils._getResponseData(res.data, true));
	// 			}).catch(err => {
	// 				if ((err || {}).message == '敏感词触发停止请求') {
	// 					resolve({
	// 						fail: false,
	// 						isEnd: true,
	// 						result: minganciBiaoshu,
	// 						id: "",
	// 					});
	// 				} else if ((err || {}).message == '用户主动取消') {
	// 					resolve({
	// 						fail: false,
	// 						isEnd: true,
	// 						result: zhudongCancel,
	// 						id: "",
	// 					});
	// 				} else {
	// 					if (failNum > 6) reject(err)
	// 					else fn();
	// 					failNum++;
	// 				}

	// 			})
	// 		}

	// 		fn();
	// 	});
	// }

	/** 处理chat返回数据 */
	static _getResponseData(responseText = '', isLast = false) {
		if (typeof responseText != 'string') return {};
		let isEnd = true,
			result = '',
			id = '',
			fail = false;

		try {
			if (responseText.substring(responseText.length - 2) == '\n' || isLast) {
				const lastIndex = responseText.lastIndexOf('{"role"');
				if (~lastIndex) result = responseText.substring(lastIndex);
			} else {
				let lastIndex = responseText.lastIndexOf('{"role"');
				let str = responseText.substring(0, lastIndex);
				lastIndex = str.lastIndexOf('{"role"', str.length - 2);
				result = `${str.substring(lastIndex)}`;
			}
		} catch (error) {}

		const in_analysis_fn = _ => {
			try {
				const data = JSON.parse(result);
				id = data.id;
				// result = data.text.replace(/[\n]/g, '<br/>');
				result = data.text;
				fail = data.status == "Fail";
				isEnd = data.detail.choices[0].finish_reason == 'stop';
			} catch (error) { result = ''; }
		}

		in_analysis_fn();

		// 二次解析倒数第二条数据
		if (!result) {
			const lastIndex = responseText.lastIndexOf('{"role"');
			if (~lastIndex) {
				responseText = responseText.slice(0, lastIndex);
				const lastIndex = responseText.lastIndexOf('{"role"');
				if (~lastIndex) {
					result = responseText.substring(lastIndex);
					in_analysis_fn();
				}

			}
		}

		return {
			// gpt请求失败
			fail,
			// 是否结束
			isEnd,
			// 回答的内容
			result,
			// 回答数据id
			id,
		};
	}

}

/** chat问答测试工具 */
export class ChatRequestTest {
	static stopRequest() { this._isCancel = true; }

	static _isCancel = false;

	// /** 接口请求 */
	// static request(data, onUpdateBack, url = 'chat-process') {
	// 	return new Promise((resolve, reject) => {
	// 		var i = 0;
	// 		const fn = () => {
	// 			setTimeout(() => {
	// 				const res = {
	// 					fail: false,
	// 					isEnd: true,
	// 					result: this.result.slice(0, i),
	// 					id: Date.now(),
	// 				};
	// 				onUpdateBack(res)
	// 				if (this._isCancel || i == this.result.length - 1) {
	// 					resolve(res);
	// 					i = 0;
	// 					this._isCancel = false;
	// 				} else {
	// 					i++;
	// 					fn();
	// 				}
	// 			}, 20);
	// 		}
	// 		fn();
	// 	});
	// }

	static result = `希望之光`

	// static result =
	// 	`在繁忙的都市中，一个普通的上班族李明过着平淡无奇的生活。直到有一天，他无意中捡到了一本神秘的古籍。\n\n打开书页，他发现这本书竟然是一本能够让人穿越时空的法宝。充满好奇心的李明心想，如果能够回到过去，也许能改变自己生活的遗憾。\n\n于是，李明开始利用这本古籍，逐渐改变自己的命运。他返回过去，纠正了一些错误决策，避免了一些不必要的困扰。随着时间的推移，李明越来越有能力掌握自己的命运，并利用这个神秘的法宝创造出了属于自己的成功故事。\n\n然而，随着时间的迁移，李明逐渐明白了一个道理：实现梦想并非仅仅通过改变过去就能达到。他开始思考人生的真正意义以及价值所在。\n\n最终，李明放弃了依靠这本法宝来修正过去的思维模式。他转而将注意力放在如何珍惜当下，与身边的人共同创造美好未来上。\n\n故事结束时，李明仍然是一个普通的上班族，但他已经拥有了更加坚定的内心和积极的生活态度。他学会了与困境抗争，学会了感恩，也学会了珍惜当下。\n\n这个小故事告诉我们，在繁忙的都市中，真正的成功并不在于改变过去，而是要对当下充满希望、行动起来，并珍惜身边的人和事。只有这样，才能在都市生活中找到真正的幸福和成就。`
}
